﻿using UnityEngine;
using System.Collections.Generic;
using TTGame;
/*
 * SkillData
 * 技能的数据
 *
 * 服务器数据、客户端数据，都在这
 *
 *
 * 依赖：
 * 不依赖其他类
 *
 * ！不写重复代码！
 * @author TTun
 * @date 7/17/2017 11:34:42 AM
 */
namespace TTGameEngine {


public enum SkillType {
    Attack,         //普攻
    NormalSkill,    //普通技能
    ActiveSkill,    //主动技能/大招
}


//0 近战 1 远程  2 冲锋  4 FPS
public enum SkillClass {
    Melee,
    LongDistance,
    Rush,
    FPS,
}

public class SkillData : MonoBehaviour {
    public string skillName;

    /// 选择器参数
    ///             预设参数              选择结果
    /// 扇形型参数：选择范围，夹角        原点，方向
    /// 方向型参数：选择范围, 宽度        原点，方向
    /// 范围型参数：选择范围，作用半径    中心点
    /// 选择型参数：选择范围              对象
    /// 自身范围参数：选择范围            原点
    public SkillSelectorType m_selectorType = SkillSelectorType.SelfCenter;
    public float m_selectorRadius; //选择器的范围，即离施法者的距离。
    public Vector3 m_dir;
    public float m_angle;
    public float m_width;
    public Vector3 m_center;
    public float m_hitRadius;   //作用范围
    [Tooltip("释放大招技能时的镜头效果，FPS技能此处应填False")]
    public bool SkillCameraEffect = true;


    public SkillCampID m_targetCampType;


    //子弹最大容量。注：不代表当前子弹数量
    public int MaxBulletCapacity = 999999;
    /// <summary>
    /// 像枪一样装载子弹或者自动填满子弹。
    /// false:
    ///     每次释放技能时自动填满子弹
    ///     子弹为0则技能结束。
    ///     该功能主要用于引导技能的结束条件。
    /// true:
    ///     释放技能时，初始子弹为0。
    ///     需要外部装弹。
    ///     子弹为0后，会触发reload动画
    ///     用于武器装弹，需要调用人物装弹动画。
    ///
    /// </summary>
    public bool IsNeedReloadLikeAGun = false;
    public int bulletID = 0;
    public SkillType m_skillType = SkillType.Attack;

    #region 服务器数据
    public SkillClass skillClass = SkillClass.Melee;
    public int level;
    public int skillDmgType = -1;       //技能类型：0=伤害类 1=治疗类 2=我方单体增益 3=我方群体增益 4=敌方单体减益 5=敌方群体减益
    [Tooltip("技能CD。技能结束后开始计时。")]
    public float m_CDTime = 1;
    public HurtType m_hurtType = HurtType.NoHurtAnim;
    public int angerConsume = 0;        //释放技能所需怒气。
    public int angerAdd = 0;        //每次释放增加的怒气
    [Range(1, 999)]
    public int maxHitTarget = 1; //技能中子弹最大可攻击敌人。该属性会赋值给技能里所有子弹。
    public float dmgRatio = 1f;
    public float dmgAdd = 0f;
    public float crit = 0f;
    //<BuffID, 触发几率> 技能携带的Buff的Buff触发几率
    public Dictionary<int, float> buffProbs;

    void Awake() {
        maxHitTarget = 1;
    }
    public float GetBuffTriggerRate(int buffID) {
        float rate = 0;
        if(buffProbs != null) buffProbs.TryGetValue(buffID, out rate);
        return rate;
    }
    #endregion


}


}